import { createModuleUseTimeApi, createBatchModuleUseTimeApi } from '@/api/common'
import { getSerialNo } from '@/utils/auth'

const MODULE_ID = {
  HOMEWORK: '1', // 作业
  WQ_BOOK: '2', // 错题本
  LEARNING: '3', // 资料库
  EXERCISE: '4', // 习题中心
  HOMEWORK_INPUT: '5', // 作业数据录入
  CONTACT: '6', // 联系家长
  EXAM: '7', // 考试
  DAILY: '8', // 每日打卡
  DICT_YH: '9', // 英汉双语词典
  DICT_HY: '10', // 汉英综合词典
  DICT_H: '11', // 现代汉语词典
  DICT_GH: '12', // 古代汉语词典
  CORRECT_CHINESE: '13', // 语文作文
  CORRECT_ENGLISH: '14', // 英语作文
  CLASS_GUIDANCE: '15', // 课堂导学
  ASK_FOR_LEAVE: '16', // 请假
  DICT_RY: '17' // 日语词典
}

const moduleUse = {
  state: () => ({
    // 当前使用模块
    currentModuleUse: {
      vm: undefined,
      type: undefined,
      subjectId: undefined, // 学科id
      module_start_time: undefined, // 开始时间
      updateModuleStartTime: function () {},
      onSubjectChange: function () {},
      submit: function () {}
    }
  }),
  mutations: {
    setCurrentModuleUse(state, payload) {
      const { vm, type, subjectId } = payload

      state.currentModuleUse = {
        vm,
        type,
        subjectId, // 学科id
        module_start_time: Date.now(), // 开始时间
        updateModuleStartTime: function (startTime) {
          this.module_start_time = startTime
        },
        onSubjectChange: function (subjectId) {
          this.subjectId = subjectId
          this.updateModuleStartTime(Date.now())
        },
        submit: async function (callback = () => {}) {
          const { subjectId, module_start_time } = this
          const module_end_time = Date.now() // 结束时间
          let useTime
          if ((module_end_time + '').length === 13) {
            // 十三位时间戳
            useTime = (module_end_time - module_start_time) / 1000 / 60 // 使用时长（分钟）
          } else {
            // 十位时间戳
            useTime = (module_end_time - module_start_time) / 60 // 使用时长（分钟）
          }

          const data = {
            moduleId: type,
            subject: undefined,
            warningDay: this.vm.$utils.parseTime(new Date().getTime(), '{y}-{m}-{d}'), // 预警日期
            useTime: parseFloat(useTime).toFixed(2),
            timeStamp: Date.now(), // 时间戳
            description: `SN：${await getSerialNo()} ModuleId：${type} Date：${this.vm.$utils.parseTime(
              new Date().getTime(),
              '{y}-{m}-{d}'
            )} StartTime：${this.vm.$utils.parseTime(
              module_start_time,
              '{y}-{m}-{d} {h}:{i}:{s}'
            )} EndTime：${this.vm.$utils.parseTime(
              module_end_time,
              '{y}-{m}-{d} {h}:{i}:{s}'
            )} UseTime：${parseFloat(useTime).toFixed(2)}分钟`
          }

          if (subjectId) {
            // 单科目
            data.subject = subjectId
            const { data: isSuccess } = await createModuleUseTimeApi(data)
            callback(isSuccess)
          } else {
            // 全部科目
            try {
              // 批量提交
              const batchData = []
              this.vm.subjects.list.forEach(async (item) => {
                if (item.value) {
                  data.subject = item.value
                  batchData.push(JSON.parse(JSON.stringify(data)))
                }
              })
              const { data: isSuccess } = await createBatchModuleUseTimeApi(batchData)
              callback(isSuccess)
            } catch (error) {
              const { data: isSuccess } = await createModuleUseTimeApi(data)
              callback(isSuccess)
            }
          }
        }
      }
    }
  },
  actions: {}
}

export { moduleUse, MODULE_ID }
